#pragma once

#include <qopenglbuffer>
#include <qopenglvertexarrayobject>
#include <QOpenGLShaderProgram>
#include <QVector>
#include <qopenglfunctions>
#include <qopengldebug.h>

#include "Camera.h"
#include "shape.h"

class Scene : public QObject
{
Q_OBJECT
public:
	Scene(void);
	~Scene(void);
	
	void resize(int _w, int _h);
	void render();
	bool init();

	void strafe_ud(float _amount);
	void strafe_lr(float _amount);
	void rotate_ud(float _amount);
	void rotate_lr(float _amount);
    void zoom(float _amount);

	void setContext(QOpenGLContext *c){_ctx = c;}
    void setFuncSet(QOpenGLFunctions *f){ _func = f;}

public slots:
	void onMessageLogged( QOpenGLDebugMessage );

	
private:

    bool prepare_program();

	QOpenGLContext * _ctx;
    QOpenGLFunctions *_func;
	QOpenGLDebugLogger *_logger;

    QOpenGLShaderProgram *_shader_program;

    QVector<Shape*> _objs;
	Camera _cam;
	int _w;
	int _h;



};

